@@ -123,6 +123,11 @@ module WebRequestConcern |
||
123 | 123 |
|
124 | 124 |
builder.use FaradayMiddleware::Gzip |
125 | 125 |
|
126 |
+ unless builder.headers.any? { |key,| /\Aaccept[-_]encoding\z/i =~ key } |
|
127 |
+ # Exclude `deflate` by default. See #1018. |
|
128 |
+ builder.headers[:accept_encoding] = 'gzip,identity' |
|
129 |
+ end |
|
130 |
+ |
|
126 | 131 |
case backend = faraday_backend |
127 | 132 |
when :typhoeus |
128 | 133 |
require 'typhoeus/adapters/faraday' |
@@ -227,6 +227,36 @@ describe Agents::WebsiteAgent do |
||
227 | 227 |
event = Event.last |
228 | 228 |
expect(event.payload['version']).to eq(2) |
229 | 229 |
end |
230 |
+ |
|
231 |
+ it 'should either avoid or support a raw deflate stream (#1018)' do |
|
232 |
+ stub_request(:any, /deflate/).with(headers: { 'Accept-Encoding' => /\A(?!.*deflate)/ }). |
|
233 |
+ to_return(body: 'hello', |
|
234 |
+ status: 200) |
|
235 |
+ stub_request(:any, /deflate/).with(headers: { 'Accept-Encoding' => /deflate/ }). |
|
236 |
+ to_return(body: '\xcb\x48\xcd\xc9\xc9\x07\x00\x06\x2c'.force_encoding(Encoding::ASCII_8BIT), |
|
237 |
+ headers: { 'Content-Encoding' => 'deflate' }, |
|
238 |
+ status: 200) |
|
239 |
+ |
|
240 |
+ site = { |
|
241 |
+ 'name' => 'Some Response', |
|
242 |
+ 'expected_update_period_in_days' => '2', |
|
243 |
+ 'type' => 'text', |
|
244 |
+ 'url' => 'http://deflate', |
|
245 |
+ 'mode' => 'on_change', |
|
246 |
+ 'extract' => { |
|
247 |
+ 'content' => { 'regexp' => '.+', 'index' => 0 } |
|
248 |
+ } |
|
249 |
+ } |
|
250 |
+ checker = Agents::WebsiteAgent.new(name: "Deflate Test", options: site) |
|
251 |
+ checker.user = users(:bob) |
|
252 |
+ checker.save! |
|
253 |
+ |
|
254 |
+ expect { |
|
255 |
+ checker.check |
|
256 |
+ }.to change { Event.count }.by(1) |
|
257 |
+ event = Event.last |
|
258 |
+ expect(event.payload['content']).to eq('hello') |
|
259 |
+ end |
|
230 | 260 |
end |
231 | 261 |
|
232 | 262 |
describe 'encoding' do |